package com.demo.factory01.easyfactory.customer;

import com.demo.factory01.easyfactory.factory.Factory;
import com.demo.factory01.easyfactory.product.BMW;

/**
 * 工厂类角色： 该模式的核心，用来创建产品，含有一定的商业逻辑和判断逻辑
 * 抽象产品角色：它一般是具体产品继承的父类或者实现的接口。
 * 具体产品角色：工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
 *
 * 简单工厂模式的优缺点：
 *
 *         简单工厂模式提供专门的工厂类用于创建对象，实现了对象创建和使用的职责分离，
 *         客户端不需知道所创建的具体产品类的类名以及创建过程，只需知道具体产品类所对应的
 *         参数即可，通过引入配置文件，可以在不修改任何客户端代码的情况下更换和增加新的
 *         具体产品类，在一定程度上提高了系统的灵活性。
 *
 *         但缺点在于不符合“开闭原则”，每次添加新产品就需要修改工厂类。在产品类型较多时，
 *         有可能造成工厂逻辑过于复杂，不利于系统的扩展维护，并且工厂类集中了所有产品创建
 *         逻辑，一旦不能正常工作，整个系统都要受到影响。
 *
 *         为了解决简单工厂模式的问题，出现了工厂方法模式。
 */
public class Customer {
	public static void main(String[] args) {
		Factory factory = new Factory();
		BMW bmw320 = factory.createBMW(320);
		BMW bmw523 = factory.createBMW(523);
	}
}
